/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import bancoDados.ConexaoDB;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author tecnico
 */
public class Pedido {
    private int codigo;
    private Date data;
    private Time hora;
    private Cliente cliente;
    private String telefoneEntrega;
    private String enderecoEntrega;
    private String bairroEntrega;
    private int numeroEntrega;
    private String complementoEntrega;
    private List<Pizza> pizzas = new ArrayList<Pizza>();
    private String status;
    private float total;

    public int getNumeroEntrega() {
        return numeroEntrega;
    }

    public void setNumeroEntrega(int numeroEntrega) {
        this.numeroEntrega = numeroEntrega;
    }
    

    public String getBairroEntrega() {
        return bairroEntrega;
    }

    public void setBairroEntrega(String bairroEntrega) {
        this.bairroEntrega = bairroEntrega;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getComplementoEntrega() {
        return complementoEntrega;
    }

    public void setComplementoEntrega(String complementoEntrega) {
        this.complementoEntrega = complementoEntrega;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public String getEnderecoEntrega() {
        return enderecoEntrega;
    }

    public void setEnderecoEntrega(String enderecoEntrega) {
        this.enderecoEntrega = enderecoEntrega;
    }

    public Time getHora() {
        return hora;
    }

    public void setHora(Time hora) {
        this.hora = hora;
    }

    public List<Pizza> getPizzas() {
        return pizzas;
    }

    public void setPizzas(List<Pizza> pizzas) {
        this.pizzas = pizzas;
    }

    public String getTelefoneEntrega() {
        return telefoneEntrega;
    }

    public void setTelefoneEntrega(String telefoneEntrega) {
        this.telefoneEntrega = telefoneEntrega;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public float getTotal() {
        return total;
    }

    public void setTotal(float total) {
        this.total = total;
    }

    public void salvar() {
        try {
            String sql;
            String lData;
            String lHora;

            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date date = new Date();
            lData = dateFormat.format(date);

            dateFormat = new SimpleDateFormat("HH:mm:ss");
            lHora = dateFormat.format(date);

            sql = "INSERT INTO pedido (data, hora, codigo_cliente, telefone_entrega, endereco_entrega, bairro_entrega, complemento_entrega, numero_entrega, status)";
            sql = sql + "VALUES('" + lData + "','" + lHora + "','" + this.cliente.getCodigo() + "','" + this.telefoneEntrega + "', '" + this.enderecoEntrega + "', '" + this.bairroEntrega + "','" + this.complementoEntrega + "', " + this.numeroEntrega + ",'PREPARO');";        

            ConexaoDB con = new ConexaoDB();
            con.executaComando(sql);

            ResultSet rs;
            rs = con.executaQuery("SELECT max(codigo) as codigo FROM pedido;");
            rs.first();
        
            this.codigo = rs.getInt("codigo");
            int i = 1;
            for (Pizza pizza : this.getPizzas()) {
                pizza.setPedido(this);
                pizza.setNumero(i);
                pizza.salvar();
                i++;
            }
        } catch (SQLException ex) {
            Logger.getLogger(Pedido.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void alterarStatus(String status, int pedido){
        String sql;
        
        sql = "UPDATE pedido SET status='" + status + "' ";
        sql = sql + " WHERE codigo=" + pedido + ";";
        
        ConexaoDB con = new ConexaoDB();
        con.executaComando(sql);
        System.out.println("SQL: "+sql);
    }
    public ResultSet listar(){
        String sql;
        
        sql = "SELECT * FROM pedido;";

        ConexaoDB con = new ConexaoDB();
        return con.executaQuery(sql);
    }
    
    public ArrayList<Pedido> getAll() {         
        try {  
            ArrayList<Pedido> listAll = null;  
            Pedido pedido = null;
            Cliente cliente = new Cliente();
            ConexaoDB con = new ConexaoDB();
            ResultSet rs;

            rs = con.executaQuery("SELECT * FROM pedido order by codigo desc;");

            if (rs.next()) { //percorrendo os registros encontrados  
                listAll = new ArrayList<Pedido>();  
                do {                      
                    pedido = new Pedido();//instanciando objeto                                       

            /*setando atributos de acordo com os seus tipos primitivos*/     
                    pedido.setCodigo(rs.getInt("codigo"));
                    pedido.setData(rs.getDate("data"));  
                    pedido.setHora(rs.getTime("hora"));  
                    pedido.setCliente(cliente.buscaClienteCodigo(rs.getInt("codigo_cliente")));  
                    pedido.setTelefoneEntrega(rs.getString("telefone_entrega"));
                    pedido.setEnderecoEntrega(rs.getString("endereco_entrega"));
                    pedido.setBairroEntrega(rs.getString("bairro_entrega"));
                    pedido.setComplementoEntrega(rs.getString("complemento_entrega"));
                    pedido.setNumeroEntrega(rs.getInt("numero_entrega"));
                    pedido.setStatus(rs.getString("status"));
                    pedido.setTotal(buscaTotal(pedido));

                    listAll.add(pedido); //add a lista de objetos encontrados e setados  
                } while (rs.next());  
            }  
            rs.close();  
            return listAll; //retornando a lista de registros  
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;  
        }  
    }
    
    private float buscaTotal(Pedido pedido){
        try {
            ConexaoDB con = new ConexaoDB();
            ResultSet rs;
            rs = con.executaQuery("SELECT sum(t.preco) total "
                    + "FROM tamanho t, pizza p "
                    + "WHERE t.codigo=p.codigo_tamanho "
                    + "AND p.codigo_pedido=" + pedido.getCodigo() + ";");
            rs.first();

            return rs.getFloat("total");
        } catch (SQLException ex) {
            Logger.getLogger(Pedido.class.getName()).log(Level.SEVERE, null, ex);
            return 0;
        }
    }
    
    public boolean excluir(int codigo){
        String sql;
        sql = "DELETE from pedido WHERE codigo=" + codigo +";";
        
        ConexaoDB con = new ConexaoDB();
        return con.executaComando(sql);
    }
    
    public String buscaCliente(){
        String infoCliente;
        
        infoCliente = "- " + cliente.getNome() + " \n- Fone: " + cliente.getTelefone() + " \n- Endereço: " + cliente.getEndereco() + ", nº " + cliente.getNumero() + " \n- Bairro: " + cliente.getBairro();        
        
        return infoCliente;
    }
    
}